package com.kingsoft.miot.bridge.authority;

import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * shiro 配置
 * 
 * @author HUJIANQING
 *	
 */

//@Configuration
//public class ShiroConfig {
//
//	@Bean
//	public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
//		ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
//		// 必须设置 SecurityManager
//		shiroFilterFactoryBean.setSecurityManager(securityManager);
//		// setLoginUrl 如果不设置值，默认会自动寻找Web工程根目录下的"/login.jsp"页面 或 "/login" 映射
//		shiroFilterFactoryBean.setLoginUrl("/data/user/info");
////		shiroFilterFactoryBean.setLoginUrl("/testaa/redis");
//		// 设置无权限时跳转的 url;
//		shiroFilterFactoryBean.setUnauthorizedUrl("/prelogin");
//
//		// 设置拦截器
//		Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
//		// 游客，开发权限
////		filterChainDefinitionMap.put("/guest/**", "anon");
//		// 酒店管理员权限
////		filterChainDefinitionMap.put("/data/hotels/**", "roles[chief_manager,area_manager,hotel_manager]");
//		// 管理员信息权限
//		filterChainDefinitionMap.put("/data/managers/**", "roles[chief_manager,area_manager,hotel_manager]");
//		// 开放登陆接口
//		filterChainDefinitionMap.put("/data/user/info", "anon");
//		// 测试接口
//		filterChainDefinitionMap.put("/test/controller", "anon");
//		// 其余接口一律拦截
//		// 主要这行代码必须放在所有权限设置的最后，不然会导致所有 url 都被拦截
//		filterChainDefinitionMap.put("/**", "authc");
//		shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
////		System.out.println("Shiro拦截器工厂类注入成功");
//		return shiroFilterFactoryBean;
//	}
//
//	/*
//	 * 以下两个bean用来使shiro注解生效
//	 */
//	/**
//	 * LifecycleBeanPostProcessor 管理shiro生命周期,不直接跟权限注解关联
//	 * 
//	 * @return
//	 */
//	@Bean
//	public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
//		return new LifecycleBeanPostProcessor();
//	}
//
//	@Bean
//	public static DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() {
//		return new DefaultAdvisorAutoProxyCreator();
//	}
//
//	/**
//	 * 注入 securityManager
//	 */
//	@Bean
//	public SecurityManager securityManager() {
//		DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//		// 设置realm.
//		securityManager.setRealm(customRealm());
//		return securityManager;
//	}
//
//	/**
//	 * 自定义身份认证 realm;
//	 * <p>
//	 * 必须写这个类，并加上 @Bean 注解，目的是注入 CustomRealm， 否则会影响 CustomRealm类 中其他类的依赖注入
//	 */
//	@Bean
//	public CustomRealm customRealm() {
//		return new CustomRealm();
//	}
//}